{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Captial Asset Pricing Model Implementation\n",
    "\n",
    "Appicable Equations:\n",
    "\n",
    "$E[r_a] = r_f + \\beta_a(E[r_m]-r_f)$\n",
    "\n",
    "- $E[r_a]$ = The expected return of investment: it may be a single stock or a portfolio *effecient or not it does not matter*\n",
    "\n",
    "- $r_f$ = Base return because of risk-free rate\n",
    "- $\\beta_a(E[r_m]-r_f)$ = Market excess return multiplied by a factor *(beta)*\n",
    "\n",
    "<div style=\"color:blue;font-size:20px\"> $\\beta_a = \\frac{Cov(r_a,r_m)}{Var(r_m)}$ </div>\n",
    "\n",
    "<div style=\"color:blue;font-size:20px\"> $\\beta_a = w_1\\beta_1 + w_2\\beta_2 + \\cdots + w_n\\beta_n$ </div>\n",
    "\n",
    "<div style=\"color:blue;font-size:20px\"> $\\alpha = E[r_a] - (r_f  + \\beta(E[r_m]-r_f))$ </div>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 0.00230049  0.00093755]\n",
      " [ 0.00093755  0.00131399]]\n",
      "Beta from formula: 0.713510389352\n",
      "Beta from regression: 0.713510389352\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAJoCAYAAAC3G1IbAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3Xl8VNXdx/HvjxBMKkgQUEkQAbVR\nESGAUKEoSm3QR1ukbmhxqdXaulSxqVtbEPqILYpa7eb61AUpKlBKFcTaKBW1AgFBFBeWQlDEJaxB\nQ3KeP+6dMFkmmUkyd5Z83q9XXiZ3zr33Nzfnpsy355xrzjkBAAAAAAAAQWqT6AIAAAAAAADQ+hBK\nAQAAAAAAIHCEUgAAAAAAAAgcoRQAAAAAAAACRygFAAAAAACAwBFKAQAAAAAAIHCEUgAAJAEzu9DM\nXmjG/sVm9sOWrCmZRHt9zOwWM3soiJpagpmNMLNNUbadaGZPRNnWzOxRM/vCzP5jZsPNbE0z6nRm\ndoT//Z/M7JdNPVYzavg/M/t1S7dNFma23sy+FeG1lHs/AABEg1AKAIAYmNkFZrbEzHaa2Udm9ryZ\nfbO5x3XOPemc+3bYeapDgJZiZpf4xz23JY9bz3l6+udp20CbiWZW4V/HMjNbbGYnRGpf+/o00O52\n51xcwjn/PW0Jf19m1tbMPjEzF49zNsM3JZ0qqbtzbrBzbpFzLr8lDuycu9I5N7kljoX4I9ACACQz\nQikAAKJkZuMl3SPpdkkHS+oh6Q+SvpvIumJwsaTP/f8mg78659pL6irp35JmmZnVbtRQuJUAZZJO\nC/v5dElfJKiWhhwmab1zbleiCwEAAIiEUAoAgCiYWUdJkyRd5Zyb5Zzb5ZyrcM793TlX5LcZbGav\n+SN/PjKz+82sXdgxnJlda2ZrzexTM5tqZm381y4xs3/737/i77LCH0l0npl1MrN5ZrbVn5I1z8y6\nx1D/YZJOknSFpEIzOzjstS7+8crM7HMzWxRW141mVmpmO8xsjZmN9Le3MbObzOxDM/vMzGaa2YH+\nIUP1l/n1RxwBJUnOuQpJf5F0iKTO/rV41czuNrPPJU0Mvz7++fuY2UK/3i1mdou/vXqKW9iIrYvN\n7L/+Nb817BjZZvYX/3q+Y2Y/j2Iq3eOSLgr7+SJJj9W61rlmNtev7QMzu7zWOf/PP+dqScfXs++z\n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\nlHLOPSDpAUkaNGiQGzFiRNMrRlIrLi4Wv19I9AXsQ19AOPoDQugLCKEvIIS+kJreeecddejQocWP\nu2PHjpiOG2rboUMHPfzwwzr++OM1ZcoUbdiwQePGjdOuXbskSffff7+GDh2qSZMm6Z133tHw4cN1\n8cUX66yzzqq3XUPnOuWUU/TWW2+pQ4cOmjZtmh555BFJ0g9/+ENdd911kqT27dtr586dKi4u1sSJ\nE9WlSxetWrVKAwcO1BNPPKH77rtPH330kc4880x16dJFL774oi677DItWbJEZqYf/OAHuv766+vU\nkJWVpYKCgqivT7hkCqXelHSkmfWSVCrpfEkXRLOjmXWStNs596WZdZE0TNJv41YpAAAAAABIaXNK\nSjV1wRptLitXbk62igrzNbogllWEGte7d29VVVXpk08+0UEHHaSFCxcqKytL77//vsaOHaslS5bo\njjvu0J133ql58+ZJknbv3l1vu0j27t2r559/XqNGjdLSpUv16KOP6o033pBzTkOGDNFJJ51UJzQq\nKSnR22+/rdzcXA0bNkyvvvqqrr32Wk2bNk3/+te/1KVLFy1dulSlpaVatWqVJKmsrKxFr42URGtK\nOef2Srpa0gJJ70ia6Zx728wmmdl3JMnMjjezTZLOkfRnM3vb3/1oSUvMbIWkf0m6o9ZT+wAAAAAA\nACR5gdTNs1aqtKxcTlJpWblunrVSc0pKW/xcoWWTKioqdPnll6tv374655xztHp1/bFFtO3Ky8vV\nv39/DRo0SD169NBll12mf//73zrrrLO0//77q3379hozZowWLVpUZ9/Bgwere/fuatOmjfr376/1\n69fXadO7d2+tXbtW11xzjebPn68DDjig6RchgmQaKSXn3HOSnqu17Vdh378pb1pf7f0WS+ob9wIB\nAAAAAEDKm7pgjcorKmtsK6+o1NQFa1p0tNTatWuVkZGhgw46SLfddpsOPvhgrVixQlVVVcrKyqp3\nn7vvvjuqdtnZ2Vq+fHmNbdGuG77ffvtVf5+RkaG9e/fWadOpUyetWLFCCxYs0O9//3vNnDmzelpg\nS0makVIAAAAAAABB2FxWHtP2pti6dauuvPJKXX311TIzbdu2Td26dVObNm30+OOPq7LSC8U6dOig\nHTt2VO8XqV00TjzxRM2ZM0e7d+/Wrl27NHv2bA0fPjzq/cNr+fTTT1VVVaXvfe97mjx5spYtWxb1\n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\nACLi4QxIuPffl77+9ejaTpggTZwoSSouLtaIESPiVlZt5eXlevfdd+s956BBg5SXl6e5c+eqsrKy\nevTStm3bdN555+mhhx5Su3btVFRUpJ/+9Kd6/fXX6z1HS60pVVJSoqqqKq1bt05HHHFE9fbFixer\nuLi4RRcdb8p1WbZsmdauXatevXpp/fr1+vOf/6yioiKdeuqpevbZZ9WuXTsdd9xxmjdvns4999wW\nq1WqOZp98+bNyrtn3ygryVu0/Uc/+pEkadeuXS167lSVNKGUpMGSPnDOrZUkM5sh6buSwkOp70qa\n6H//jKT7rbVPwAQAAACSFA9nQOCuuUa6//7o2m7cKNUafZMoy5cvV2Vlpfr3r3+cxemnn64HH3xQ\nr776avW6TN26dauxSPbZZ5+t+fPnRzxHS6wpVVlZqVWrVunLL7/U8OHDddVVV+nggw/WypUr9cgj\nj6hfv3765S9/2axzhGvKdVm2bJmuuOIKff/735ck9evXT3v27NGf/vQnHXjggZKkQw89VHv37m2x\nOuuTm5urwYMHa9GiRRo3bpyGDh2qBx98UJ9++qlGjRqlF154Qffcc4/OO+88devWLa61JLNkmr6X\nJyl8fOAmf1u9bZxzeyVtkxQa89bLzErM7GUzGx7vYgEAAAA0rPZ0lrycbE0Z05f1pNAyNm+uOQ3P\nLHIgdeWVNafhOZc0gZS0b92kSOFLaN2m2bNnV2+bN2+eRo4cqdzcXHXs2FGFhYU65phj4lrnu+++\nq/Lyco0dO1aHHHKIJk+erJ///OdatGiRfvGLX6i4uFgdOnRosfM15bqUlJToO9/5TvXPK1as0De/\n+c3qQMo5p9WrV8f9WknSzJkzdcYZZ2jOnDkaP368srKytGjRIt1999066qijdP3112v79u1xryOZ\nWbSLi8WbmZ0jqdA590P/53GSBjvnrglr87bfZpP/84fyRljtlNTeOfeZmQ2UNEdSH+dcnd+umV0h\n6QpJOvjggwfOmDEjzu8MibJz5061b98+0WUgCdAXEEJfQDj6A0LoCwihLyS3wx57TL0efTSqtm/8\n5S8q79GjyedK9r6wcuVKTZgwQb/85S/Vp08ftWvXTpMnT9Zhhx2miy66KG7nXbhwoW6//Xbdd999\nOvbYY+N2nqbatm2bRo8erblz51aHY1OnTlVOTo4uv/xySVJpaakuvfRSPffcc2rbNrrJY8neH5LR\n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\nc1SSz3Q/Htn9/Mg52l2T5Ee6n/9Ckj9b6a/PbbjjIclVSU6dY59fSfKX3c+fkeStK/21ui3fWEjy\nbUlO77Y5LMn7kzyxe9+5YQxuSdYluSHJQ7s/w48nOXFWmzl/r5Oc2G1/eJITusdZ188x3Ubvtsix\ncHKSY7uff2+SyZ595ny9cBvt2yLHw/FJrp3nuB9K8pgkleQfpl8z3Eb3tpixMKvNSUk+03PfuWHM\nbn2OheOTfF+SNyZ5Ws/2hd5XOC8c5M1MKcbNU5Jc1P38oiRb52izJcl7W2u3ttZuS/LeJD/a26Cq\nHp7k6HTefDK+lmQ8HOC4b09yhv92jLyDHgutta+31t6XJK21byX5aJLjhtBnls6jk1zfWvtM92d4\ncTpjotd8v9dPSXJxa+2brbXPJrm+e7x+jsnoOeix0Frb2Vq7ubv9k0nuU1WHD6XXLJfFnBvmVFUP\nSnK/1toHWued6Bsz92sOo2WpxsJPJ3nLsvaU5XbAsdBa+1xr7RNJ7p6175x/SzovLI5QinFzTGvt\ni0nS/TjXFNmNSb7Qc/+m7rZeP53Ofz96K/0/tao+UVVvr6oHL2WnWTZLMR5e351u/fs9f3jcs09r\n7a4ktyf5jqXuPEtqSc4NVbUhyU8kuaJns3PD6OvnvD/f7/V8+/ZzTEbPYsZCr6cm2dla+2bPtrle\nLxhtix0PJ1TVzqr6x6r64Z72Nx3gmIyepTo3/FT2D6WcG8bLYl7fF/qbwXnhIB260h2A2arq8iTf\nOcdDL+73EHNsm32ZyWck+bme+3+f5C2ttW9W1S+l81+Sx4UVt8zj4Wdaa5NVdd8kl6QzJt54gH1Y\nIct9bqiqQ9P5Q/M1rbXPdDc7N4yHfn5n52sz3/a5/nHnPDD6FjMWOg9WPSLJK5I8oefx+V4vGG2L\nGQ9fTPIfWmu3VNUpSbZ3x4a/EcbTUpwbfjDJ11tr1/Y87twwfhbzOzzo3xL0QSjFyGmtPX6+x6rq\nS1X1oNbaF7vTJL88R7ObkmzuuX9cOuu9p4/x/UkOba1d0/Oct/S0/6t0/hhlBCzneGitTXY/fq2q\n3pzOdN43dvd5cJKbukHF/ZPcuvivhsVY7nNDkguTXNdae3XPczo3jIfp39lpxyW5eZ42s3+vF9r3\nQMdk9CxmLKSqjkvyd0l+vrV2w/QOC7xeMNoOejx0Z9N/M0laa9dU1Q1JvqvbvneJt3PDeFjUuaHr\n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\ngg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1b04fae1cc0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Expected return: 0.0901131588095\n"
     ]
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import pandas_datareader.data as web\n",
    "import pandas as pd\n",
    "import datetime\n",
    "import scipy.optimize as optimize\n",
    "\n",
    "\n",
    "def capm(startDate,endDate,ticker1, ticker2):\n",
    "    \n",
    "    risk_free_rate = 0.05\n",
    "    # time frame for calcuating returns\n",
    "    month = 12\n",
    "    daily = 252 \n",
    "    \n",
    "    # get stock data from yahoo\n",
    "    stock1 = web.get_data_yahoo(ticker1, startDate, endDate)\n",
    "    stock2 = web.get_data_yahoo(ticker2, startDate, endDate)\n",
    "    \n",
    "    # we prefer monthly returns instead of daily returns\n",
    "    return_stock1 = stock1.resample('M').last()\n",
    "    return_stock2 = stock2.resample('M').last()\n",
    "    \n",
    "    # create a dataframe from thae data - adjusted close price is usually used\n",
    "    data = pd.DataFrame({'s_adjclose':return_stock1['Adj Close'], 'm_adjclose':return_stock2['Adj Close']}, index=return_stock1.index)\n",
    "    \n",
    "    # use natural logarithm of the returns\n",
    "    data[['s_returns','m_returns']] = np.log(data[['s_adjclose','m_adjclose']]/data[['s_adjclose','m_adjclose']].shift(1))\n",
    "    \n",
    "    # no need for NaN/missing values\n",
    "    data = data.dropna()\n",
    "    \n",
    "    # Covariance Matrix: the diagonal items are the variances - off diagonals are the covariance\n",
    "    # The matrix is symmetric: cov[0,1] = cov[1,0]\n",
    "    covmat = np.cov(data[\"s_returns\"],data[\"m_returns\"])\n",
    "    print(covmat)\n",
    "    \n",
    "    # calculate beta using covarience\n",
    "    beta = covmat[0,1]/covmat[1,1]\n",
    "    print(\"Beta from formula:\",beta)\n",
    "    \n",
    "    # Use linear Regression to fit a line to the data [Stock_Returns, market_returns] - slope is the beta\n",
    "    beta,alpha = np.polyfit(data['m_returns'],data[\"s_returns\"],deg=1)\n",
    "    print(\"Beta from regression:\", beta)\n",
    "    \n",
    "    # plot\n",
    "    fig,axis = plt.subplots(1,figsize=(20,10))\n",
    "    axis.scatter(data[\"m_returns\"],data[\"s_returns\"], label=\"Data Points\")\n",
    "    axis.plot(data[\"m_returns\"],beta*data[\"m_returns\"] + alpha, color='red', label=\"CAPM Line\")\n",
    "    plt.title('Capital Asset Pricing Model, finding alphas and betas')\n",
    "    plt.xlabel('Makert return $R_m$', fontsize=18)\n",
    "    plt.ylabel('Stock return $R_a$')\n",
    "    plt.text(0.08,0.05, r'$R_a = \\beta * R_m + \\alpha$', fontsize=18)\n",
    "    plt.legend()\n",
    "    plt.grid(True)\n",
    "    plt.show()\n",
    "    \n",
    "    # calculate the expected return acording to the CAPM formula \n",
    "    expected_return = risk_free_rate + beta*(data['m_returns'].mean()*month-risk_free_rate)\n",
    "    print(\"Expected return:\",expected_return)\n",
    "if __name__ == \"__main__\":\n",
    "    # using historical data 2010-2017: the market is the S&P500\n",
    "    capm('2010-01-01','2017-01-01','IBM','^GSPC')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
